<?php
/**
 * Model_Category
 * 
 * @package    Model
 * @author     Windy
 */
class Model_Category extends Zend_Db_Table_Abstract
{
	protected $_name = "category"; 
	protected $_dependentTables = array ('Model_Post');
	
	/**
	 * 
	 * Lấy toàn bộ chuyên mục và sắp xếp có phân cấp
	 */
	public function getAllCategories(){
		return $this->fetchAll();
	}
	
	
	/**
	 * 
	 * Thêm mới 1 chuyên mục
	 * @param string $name Tên chuyên mục (đã thêm ngôn ngữ)
	 * @param string $slug Slug hiển thị trên url
	 * @param string $description Miêu tả
	 * @param int $prioriry Thứ tự
	 * @return int id autoincrement
	 */
	public function insertCategory($name, $slug, $description, $priority, $page_title, $page_description, $tags, $showed_on_hp){
		try{
			$category = $this->createRow();
			$category->name = $name;
			$category->slug = $slug;
			$category->description = $description;
			$category->priority = $priority;
                  $category->page_title = $page_title;
                  $category->page_description = $page_description;
                  $category->tags = $tags;
                  $category->showed_on_hp = $showed_on_hp;
			$category->save();
			$id = $this->_db->lastInsertId();
			return $id;
		}catch(Exception $ex){
			echo $ex->getMessage();
			return false;
		}
	}

	/**
	 * 
	 * Lấy chuyên mục theo mã
	 * @param int $id
	 * @return Zend_Db_Table_Row category
	 */
	public function getCategoryByID($id){
		return $this->fetchRow($this->select()->where('id =?', $id));
	}
	
	/**
	 * 
	 * Update chuyên mục
	 * @param int $id
	 * @param string $name
	 * @param string $slug
	 * @param string $description
	 * @return int số dòng được update
	 */
	public function updateCategory($id, $name, $slug, $description, $priority, $page_title, $page_description, $tags, $showed_on_hp){
		//chuẩn bị dữ liệu
		$data = array(
					'name' => $name,
					'slug' => $slug,
					'description' => $description,
					'priority' => $priority,
                              'page_title' => $page_title,
                                'page_description' => $page_description,
                               'tags' => $tags,
                               'showed_on_hp' => $showed_on_hp

				);
		try{	
			$this->update($data, 'id = '.$id);
			return true;
		}catch (Exception $e){
			echo 'Caught exception: ',  $e->getMessage(), "\n";
			return false;
		}
	
	}
	
	/**
	 * 
	 * Tìm kiếm chuyên mục theo keyword;
	 * @param string $keyword
	 * @return Zend_Db_Table_Rowset
	 */
	public function searchCategory($keyword){
		$select = $this->select()
						->where('match '.$this->_db->quoteIdentifier('name').' against (? in boolean mode)', $keyword)
						->orWhere($this->_db->quoteIdentifier('name').' like ?', '%'.$keyword.'%');
		//echo $select;
		return $this->fetchAll($select);
	}
	/**
	 * Xóa chuyên mục theo id và đồng thời xóa hết các chuyên mục con
	 * 
	 * @param int|array $id Mã các chuyên mục cần xóa
	 * @return int số bản ghi bị xóa
	 */
	public function deleteCategory($ids){
		try{
			if(is_numeric($ids)){
				return $this->delete('id='.$ids);
			}else{
				return $this->delete('id in ('.$ids.')');
			}
		}catch(Exception $ex){
			echo $ex->getTraceAsString();
			return false;
		}
	}
      /**
       * Lấy category theo slug
       * @param $string $slug
       * @return Zend_Db_Table_Rowset_Abstract
       */
      public function getCategoryBySlug($slug){
        return $this->fetchRow($this->select()->where("slug = ?", $slug));
      }
      public function getShowedCategories(){
          return $this->fetchAll($this->select()->where("showed_on_hp = 1"));
      }

}